/**
 * @description 通用vuex模块
 */

// import { decodeApi, encodeApi } from "@/utils"

// function rightsAct({ commit }, args) {
//     // todo 业务数据请求
//     commit('setUserRights', [])
// }

// const actions = {
//     // 每一个action方法都会被vuex进行二次处理，会把第一个参数设置为store实例对象
//     // 而当前方法只需要commit方法，所以可以使用解构引入
//     rightsAct
// }

// 在页面刷新的时候，会重置这个对象，所以页面刷新数据会丢失
const common = {
    namespaced: true,
    // 定义数据对象并初始化数据
    state: {
        // token数据应该是登录请求回来后，就必须立即使用的数据，所以它不能在vuex中进行异步处理，所以只能mutation
        token: '11',
        userInfo: {},
        // 可以在vuex中异步请求回来的数据，因为登陆以后，不会立即使用这个数据，因为权限信息应该是用户操作界面的时候才会使用
        userRights: []
    },
    getters: {
        token(_state) {
            return _state.token
        },
        userInfo(_state) {
            return _state.userInfo
        },
        userRights(_state) {
            return _state.userRights
        }
    },
    // actions,
    mutations: {
        setToken(_state, _token) {
            // 因为做了持久化，但是为了保证安全性，所以在存储的时候加密，在调用方法获取的时候解密
            _state.token = _token
        },
        setUserInfo(_state, _userInfo) {
            _state.userInfo = _userInfo
        },
        setUserRights(_state, _userRights) {
            _state.userRights = _userRights
            // 数据更新消息在这里发布
        }
    }
}

export default common